#include "zespolona.h"

zespolona::zespolona()
{
    this->re = 0.0;
    this->im = 0.0;
}

zespolona::zespolona(const double liczba)
{
    this->re = liczba;
    this->im = 0.0;
}

zespolona::zespolona(const double re, const double im)
{
    this->re = re;
    this->im = im;
}

zespolona::zespolona(const zespolona& z_1)
{
    this->re = z_1.re;
    this->im = z_1.im;
}

zespolona zespolona::z_biegunowych(const double modul, const double kat)
{
    zespolona ret;
    ret.re = std::abs(modul) * cos(kat);
    ret.im = std::abs(modul) * sin(kat);
    return ret;
}

zespolona zespolona::operator *(const zespolona &z_1)
{
    zespolona ret;
    ret.re = this->re * z_1.re - this->im * z_1.im;
    ret.im = this->im * z_1.re + this->re * z_1.im;
    return ret;
}

zespolona zespolona::operator +(const zespolona &z_1)
{
    zespolona ret;
    ret.re = this->re + z_1.re;
    ret.im = this->im + z_1.im;
    return ret;
}

zespolona zespolona::operator -(const zespolona &z_1)
{
    zespolona ret;
    ret.re = this->re - z_1.re;
    ret.im = this->im - z_1.im;
    return ret;
}

double zespolona::modul()
{
    return sqrt(pow(this->re, 2) + pow(this->im, 2));
}

zespolona& zespolona::operator =(const zespolona &z_1)
{
    if (this ==	&z_1) return *this;
    this->re = z_1.re;
    this->im = z_1.im;
    return *this;
}

zespolona& zespolona::operator =(double i_1)
{
    this->re = i_1;
    this->im = 0.0;
    return *this;
}

double zespolona::do_biegunowych()
{
    double kat;
    kat = atan2(im, re);
    kat = sin(kat) + cos(kat);
    kat *= modul();
    return kat;
}
